package com;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

import static javafx.scene.input.KeyCode.T;

/*
* DOM文档对象模型
* DOM解析模式为现将xml文档按其标签包含的结构转换且
* */
public class ParaseXmlDemo {
    public static void main(String[] args) {
        /*
        * 解析XML的大概步骤
        * 1.创建SAXReader
        * 2.使用SAXREader读取xml文档并产生Document对象
        * 这一步的作用就是DOM解析模式中此现将xml文档读取并构建
        * 整棵树的过程
        * 3.通过Document对象获取根元素（就是xml中的跟标签内容）
        * 4.从跟元素开始逐级获取元素，以达到解析XMl文档内容的目的
        * */
        //1
        SAXReader reader = new SAXReader();
        //2
        try {
            Document doc = reader.read("./emplist.xml");
            //Document doc = reader.read(new File("./emplist.xml"));
            //Document doc = reader.read(new FileInputStream("./emlist.xml"));

         //3
            /*
            * Document对象提供了获取根元素的方法：
            * Element getRootElement()
            *
            * Element的每一个实例用于表示XML文档上的一个元素（一对标签）
            * 其获取了xml元素信息的相关方法，常用的有：
            * String getName()
            * 获取元素名（标签名）
            *
            * String getText()
            * 获取文本（开始与结束标签之间的文本信息）
            *
            * String elementText()
            * 获取当前元素下指定名字的子元素中间的文本
            * String s = e.element("xxx").getText();
            * 等同于
            * String s = e.elementText("xxx"):
            *
            * Element element(String name)
            * 获取当前元素中指定名字的子元素
            *
            * List elements()
            * 获取当前元素下所有的子元素
            *
            * List elements(String name)
            * 获取当前元素下所有给定名字的同名子元素
            * */
            Element root = doc.getRootElement();
            String name = root.getName();
            System.out.println("根标签"+name);
            //获取根标签<list>下所有名为 <emp>的子标签
            List<Element> list = root.elements("emp");
            System.out.println(list.size());

            //遍历每一个<emp>标签来获取员工信息
            for(Element empEle: list){
                //获取员工姓名
                //通过<emp>获取子标签的<name>
                //Element nameEle = empEle.element("name");
                //获取<name>标签中间的文本
                //String ename = empEle.elemet("name").getText();
                String ename = empEle.elementText("name");
//                Element salary = empEle.element("salary");
//                String esalary = salary.getText();
                int age = Integer.parseInt(empEle.element("age").getText());
                String gender = empEle.elementText("gender");
                int salary = Integer.parseInt(empEle.element("salary").getText());
                //int id = Integer.parseInt(empEle.attribute("id").getValue())
                int id = Integer.parseInt(empEle.attributeValue("id"));

                System.out.println(id+" "+ename+" "+age+" "+gender+" "+salary);

            }
            /*ParaseXmlDemo p = new ParaseXmlDemo();
            p.T("name");
            p.T("age");*/


        } catch (DocumentException e){
            e.printStackTrace();
        }

    /*private void  T(String s1) throws DocumentException {
        SAXReader reader = new SAXReader();
        Document doc = reader.read("./emplist.xml");
        Element root = doc.getRootElement();
        List<Element> list = root.elements("emp");
        for(Element empEle: list) {
            String s1;
            Element s2 = empEle.element(s1);
            String type = s2.getText();
            System.out.println(s2);
        }*/
    }
}
